package com.ctsi.security;

import com.ctsi.security.domain.RolePermission;

import java.util.List;
import java.util.Set;










/**
 * 权限的接口，作为权限的门面接口
 *
 * @author yueming
 *
 */
public interface ISecurity {
	
	public static final String  PERMISION_ALLPERMISION = "_ALL";

	/**
	 * 获取用户权限相关的角色,如果用户系统没有区分，则返回所有角色
	 *
	 * @param userLoginId
	 * @return
	 */
	public abstract List<String> getSecurityRoles(String userLoginId);
	/**
	 * 获取安全级别
	 * @param userLoginId
	 * @return
	 */
	public abstract int getSecurityLevel(String userLoginId);

	/**
	 * 是否属于某个权限组
	 *
	 * @param userLoginId
	 * @param roleId
	 * @return
	 */
	public abstract boolean isSecurityRole(String userLoginId, String roleId);

	/**
	 * 指定角色是否具有权限
	 *
	 * @param roleId
	 * @param permissionId
	 * @return
	 */
	public abstract boolean rolePermissionExists(String roleId, String permissionId);

	/**
	 * 获得人员权限
	 * @param userLoginId
	 * @return
	 */
	public Set<RolePermission> getPersonRolePermission(String userLoginId);

	/**
	 * 是否有权限
	 *
	 * @param permissionId
	 *            功能ID
	 * @param userLoginId
	 *            用户登录Id
	 * @return
	 */
	public abstract boolean hasPermission(String userLoginId, String permissionId);
	
	public abstract boolean hasPermissionWithType(String userLoginId, String type, String permissionId);
	
	
	/**
	 * 一组角色中是否具有功能ID：permissionId
	 * @param roleIds
	 * @param permissionId
	 * @return
	 */
	public abstract boolean hasPermission(List<String> roleIds, String permissionId);
	
	
	public abstract boolean hasPerm(String userLoginId, String permissionId);
	
	
	
	
	
	
	/**
	 * 一组角色中是否具有功能ID：permissionId
	 * @param roleIds
	 * @param permissionId
	 * @return
	 */
	
	public abstract boolean hasPermissionInRoles(List<String> roleIds, String permissionId);



	/**
	 * 是否控制数据权限
	 * @param doTypeId 数据权限类型
	 * @return
	 */
	public abstract boolean isControl(String userLogin, String doTypeId, String action);
	


	/**
	 * 获取用户在指定类型上的数据权限id 使用findDataObjectIds代替
	 * @param userLoginId 用户登录id
	 * @param doTypeId 数据对象类型
	 * @param action 操作
	 * @return
	 */
	public abstract List<String> getDataObjectIds(String userLoginId, String doTypeId, String action);
	
	/**
	 * 获取用户在指定类型上的数据权限id
	 * @param userLoginId 用户登录id
	 * @param doTypeId 数据对象类型
	 * @param action 操作
	 * @return
	 */
	public abstract Set<String> findDataObjectIds(String userLoginId, String doTypeId, String action);
	/**
	 * 用户在指定数据上是否具有权限
	 * @param userLoginId 用户登录id
	 * @param action 操作
	 * @param dataObjectId 数据对象id
	 * @return
	 */
	public abstract boolean hasUserDataPermission(String userLoginId, String action, String dataObjectType, String dataObjectId);

	/**
	 * 角色是否具有指定数据对象的权限
	 *
	 * @param roleId
	 *            角色id
	 * @param dataObjectId
	 *            数据对象id
	 * @return
	 */
	public abstract boolean roleDataPermissionExists(String roleId, String action, String doType, String dataObjectId);
	
	/**
	 * 根据资源类型resType及在上面的操作action判断userLoginId是否具有资源resId的数据权限
	 * @param userLoginId
	 * @param resType
	 * @param action
	 * @param resId
	 * @return
	 */
	public abstract boolean hasUserResourcePermission(String userLoginId, String resType, String action, String resId);
	/**
	 * 根据资源类型resType及在上面的操作action获取userLoginId所具有的资源ID列表
	 * @param userLoginId
	 * @param resType
	 * @param action
	 * @return
	 */
	public abstract List<String> getResourceIds(String userLoginId, String resType, String action);
	
//	public abstract void addRole(SRole role) ;
//	
//	public abstract void savePermission(Permission permission) ;
//	
//	
//	
//	public abstract void saveRolePermission(RolePermission rolePermission) ;
//	
//	public abstract SRole findSRoleById(String roleId);
//	
//	public abstract List<DataObject> findDataObject(String[] field, Object[] args) ;
//	
//	public abstract boolean isForbidden(String doTypeId);
//	
//	public abstract Map<String, DataObject> getDataObject(String userLoginId,
//			String doTypeId, String action) ;

}
